home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 090 / pctjoc85.arc / MACTEST.ASM < prev    next >
Assembly Source File  |  1985-07-05  |  3KB  |  141 lines

  1.            PAGE
  2.            PAGE    ,132
  3. TITLE      MACTEST Macro expansion benchmark
  4.  
  5. ; THIS PROGRAM IS NOT EXECUTABLE.
  6. ; USE ONLY FOR TIMING MACRO GENERATION.
  7.  
  8. .NEST  = 0
  9. .IFNUM = 0
  10. .MAXIF = 0
  11.  
  12. MIF        MACRO   ARG1,CONDITION,ARG2
  13. .NEST  = .NEST  + 1
  14. .MAXIF = .MAXIF + 1
  15. .IFNUM = .MAXIF
  16.            STARTIF %.IFNUM
  17.            PUSH    AX
  18.            MOV     AX,ARG1
  19.            CMP     AX,ARG2
  20.            POP     AX
  21.            CONDITION %.IFNUM
  22.            ENDM
  23.  
  24. STARTIF    MACRO   WHERE
  25.            .IF&WHERE = 2
  26.            ENDM
  27.  
  28. MELSE      MACRO
  29.            MELSE1  %.IFNUM
  30.            ENDM
  31.  
  32. MELSE1     MACRO   WHERE
  33.            JMP     ??END&WHERE
  34.            .IF&WHERE = 1
  35. ??ELSE&WHERE:
  36.            ENDM
  37.  
  38. MENDIF     MACRO
  39.            MENDIF1 %.IFNUM
  40.            .NEST = .NEST - 1
  41.     if .NEST
  42.            .IFNUM = .IFNUM - 1
  43.            .X = .IFNUM
  44.            .Y = .IFNUM
  45.            REPT    .X
  46.              MENDIF2 %.IFNUM
  47.              ife .Y
  48.                EXITM
  49.              endif
  50.            ENDM
  51.     endif
  52.            ENDM
  53.  
  54. MENDIF1    MACRO WHERE
  55.     if .IF&WHERE - 1
  56. ??ELSE&WHERE:
  57.     endif
  58. ??END&WHERE:
  59.            .IF&WHERE = 0
  60.            ENDM
  61.  
  62. MENDIF2    MACRO   WHERE
  63.     if .IF&WHERE
  64.            .Y = 0
  65.     else
  66.            .IFNUM = .IFNUM - 1
  67.     endif
  68.            ENDM
  69.  
  70. ; Note that each condition generates a jump on the reverse
  71. ; condition.  That's because for the expression IF EQ, a jump
  72. ; to the ELSE part is taken if the result is unequal.
  73.  
  74. EQ         MACRO   WHERE
  75.            JNE     ??ELSE&WHERE
  76.            ENDM
  77.  
  78. NE         MACRO   WHERE
  79.            JE      ??ELSE&WHERE
  80.            ENDM
  81.  
  82. GT         MACRO   WHERE
  83.            JLE     ??ELSE&WHERE
  84.            ENDM
  85.  
  86. GE         MACRO   WHERE
  87.            JL      ??ELSE&WHERE
  88.            ENDM
  89.  
  90. LT         MACRO   WHERE
  91.            JGE     ??ELSE&WHERE
  92.            ENDM
  93.  
  94. LE         MACRO   WHERE
  95.            JG      ??ELSE&WHERE
  96.            ENDM
  97. CSEG       SEGMENT
  98.            ASSUME  CS:CSEG,DS:CSEG
  99. TEST       PROC
  100.            JMP     CODE1
  101. A          DW      ?
  102. B          DW      ?
  103. C          DW      ?
  104. D          DW      ?
  105. E          DW      ?
  106. F          DW      ?
  107.  
  108. ; For 10 iterations, change to IRP X,<1,2,3,4,5,6,7,8,9,0>
  109.  
  110.            IRP     X,<1>
  111. CODE&X:    MIF     A,EQ,B
  112.              MOV   WORD PTR C,1234
  113.              MOV   AX,A
  114.              MOV   BX,B
  115.              ADD   AX,BX
  116.              MIF   B,GT,C
  117.                 SUB AX,C
  118.              MELSE
  119.                NEG AX
  120.                ADD AX,C
  121.              MENDIF
  122.            MELSE
  123.              MIF   D,LE,F
  124.                ADD BX,E
  125.              MELSE
  126.                MIF F,NE,A
  127.                  SUB BX,AX
  128.                  ADD AX,E
  129.                MENDIF
  130.              MENDIF
  131.            MENDIF
  132.            ENDM
  133.  
  134. TEST       ENDP
  135. CSEG       ENDS
  136.  
  137. STACK      SEGMENT STACK
  138.            DW      32 DUP(?)
  139. STACK      ENDS
  140.            END     TEST
  141.